<?php
namespace Admin\Controller;
use Think\Image;

class GoodsController extends CommonController {
    /**
     * 商品首页
     */
    public function index() {
        $goods = D('Goods');                         // 实例化User对象
        $count = $goods->count();                    // 查询满足要求的总记录数
        $Page = new \Think\Page($count,2);  // 实例化分页类 传入总记录数和每页显示的记录数(2)
        $Page->setConfig('prev','上一页');
        $Page->setConfig('next','下一页');
        $this->show = $Page->show();                 // 分页显示输出
        $this->list = $goods->getList($Page->firstRow, $Page->listRows); // 赋值分页输出

        $this->count = $count;                       // 赋值总记录数输出
        $this->display('showList');                  // 输出模板
    }

    /**
     * 添加商品
     */
    public function add() {
        // 判断是否是post提交的数据
        if (IS_POST) {
            // p($_POST);
            $this->_add();
            die;
        }
        $this->list = D('GoodsType')->select();      // 获取所有商品类型
        $this->display();                            // 输出模板
    }

    /**
     * 根据type_id获取指定的商品类型的所有属性
     */
    public function getAttr()
    {
        // 判断是否是ajax请求
        if (IS_AJAX) {
            $type_id = I('type_id', 0, 'intval');                         // 获取指定type_id
            if ($type_id > 0) {
                $data = D('Attribute')->getAll($type_id);                 // 实例化模型获取所有数据
                // echo json_encode($data);                               // 返回给ajax
                $this->ajaxReturn($data);                                 // 返回给ajax
            }
        }
    }

    /**
     *  添加方法的逻辑操作
     */
    private function _add() {
        // 判断是否有文件上传
        if ($_FILES['goods_big_logo']['error'] == 0) {
            // 文件上传
            $uploadInfo = $this->fileUpload();
            // 判断图片上传处理
            if ( $uploadInfo ) {
                $_POST['goods_big_logo'] = $uploadInfo['goods_big_logo']['savepath']
                    . $uploadInfo['goods_big_logo']['savename'];
                // 生成缩略图
                $image = new \Think\Image();
                // 打开原图片
                $image->open('./Public/Uploads/' . $_POST['goods_big_logo']);
                // 生成缩略图路径
                $_POST['goods_small_logo'] = $uploadInfo['goods_big_logo']['savepath']
                    . 'm_' .$uploadInfo['goods_big_logo']['savename'];
                // 指定缩略图路径
                $image->thumb(220, 220, 2)
                ->save('./Public/Uploads/' . $_POST['goods_small_logo']);
            }else {
                $this->error('发生未知错误！');
            }
        }

        $Goods = D('Goods');                            // 实例化Goods模型
                                                        // 验证商品名称是否存在
        if (!$Goods->create()){
            $this->error( $Goods->getError() );
        }
        $reg = $Goods->add();                           // 添加数据到Goods表操作
        if($reg){
            D('GoodsAttribute')->addAll();              // 对属性批量存储入库
            $this->success('添加商品成功！',U('index'), 2);
            die;
        }else {
            $this->error('添加商品失败！' . $Goods->getError(), '', 2);
        };
    }

    // 上传类
    public function fileUpload(){
        $upload = new \Think\Upload();                  // 实例化上传类
        $upload->maxSize   =     3145728 ;              // 设置附件上传大小
        $upload->exts      =     array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型
        $upload->rootPath  =      './Public/Uploads/';  // 设置附件上传目录
        if ( !is_dir($upload->rootPath) ) {
            mkdir($upload->rootPath);                   // 创建
        }
        $info   =   $upload->upload();                  // 上传单个文件
        if(!$info) {
            $this->error($upload->getError());          //上传错误提示错误信息
        }else {
            return $info;                               // 上传成功 获取上传文件信息
        }
    }

    /**
     * 熟练操作
     */
    //商品相册
    public function photos()
    {
        // 接收商品id
        $this->gid = I('get.gid', 0, 'intval');
        // 判断商品id是否获取成功
        if ( $this->gid == 0 ) {
            $this->error('非法请求！请从新确认。');
        }
        // 商品模型
        $goodsPhoto = D(GoodsPhotos);
        // 判断是否是post提交方式
        if (IS_POST){
            // 接收数据进行处理
            $config = array(
                'maxSize'   => 3145728,                  // 文件大小
                'rootPath'  => './Public/Uploads/',      // 保存图片的根路径
                'savePath'  => 'Goods/',                 // 保存路径
                'exts'      => array('jpg', 'gif', 'png', 'jpeg'), // 文件类型
            );
            $upload = new \Think\Upload($config);        // 实例化上传类
            $info   = $upload->upload();                 // 上传文件
            $image  = new \Think\Image();                // 生成缩略图
            $data   = [];                                // 声明一个空数组用来保存数据
            foreach ($info as $item) {
                $src    = $item['savepath'] . $item['savename'];        // 原图路径
                $data['src'] = $src;                                    // 原图保存到数组
                $image->open($config['rootPath'] . $src);     // 打开原图片
                $thumb = $item['savepath'] . 'm_' . $item['savename'];  // 缩略图路径
                $image->thumb(200, 200, 2)
                      ->save($config['rootPath'] . $thumb);             // 生成缩略图指定路径保存
                $data['thumb'] = $thumb;                                // 缩略图保存到数组
                $data['goods_id'] = $this->gid;                         // 商品id
                $res = $goodsPhoto->add($data);                         // 入库
                if (!$res) {
                    $this->error('商品图片添加有误！');
                }
            };
        }
        // 根据商品ID($this->gid)获取所有的商品图片
        $where= 'goods_id =' . $this->gid;
        $this->list = $goodsPhoto->where($where)->select();             // 赋值图片输出
        $this->display();
    }

    // 使用ajax删除商品相册里的图片
    public function delPhoto()
    {
        $goodsPhotos = D('GoodsPhotos');                                // 实例化GoodsPhotos模型
        // 判断是否是ajax请求
        if (IS_AJAX){
            $id  = I('get.photo_id', 0, 'intval');                      // 获取被点击商品相册的ID
            echo $goodsPhotos->delPhotos($id);                          // 打印删除成功给ajax
        }
    }

    /**
     * 商品删除
     */
    public function del()
    {
        $id = I('get.gid', 0, 'intval');                                // 接收商品id
        if (!$id) {
            $this->error('非法参数！');
        }
        $goods = D('Goods');                                            // 实例化Goods模型
        $info  = $goods->find($id);                                     // 删除之前先获取图片地址
        $res   = $goods->delete($id);                                   // 根据对应的ID进行删除
        if ($res) {
            $src   = './Public/Uploads/' . $info['goods_big_logo'];     // 服务器商品原图
            $thumb = './Public/Uploads/' . $info['goods_small_logo'];   // 服务器商品缩略图
            file_exists($src) && unlink($src);                          // 删除服务器商品原图
            file_exists($thumb) && unlink($thumb);                      // 删除服务器商品缩略图
            // 删除商品中对应相册的图片
            $goodsPhotos = D('GoodsPhotos');                            // 实例化GoodsPhotos模型
            $photo_id    = $goodsPhotos->field('photo_id')
                                       ->where('goods_id =' . $id)
                                       ->select();                      // 获取到对应相册id
            foreach ($photo_id as $item) {
                $goodsPhotos->delPhotos( $item['photo_id'] );           // 遍历删除所有相册图片
            }
            $this->success('删除成功！', U('index'), 2);
            die;
        }else{
            $this->error('删除失败！');
            die;
        }
    }

    /**
     * 编辑商品操作
     */
    public function edit()
    {
        $goods = D('Goods');                                             // 实例化Goods模型
        if (IS_POST){
            //p(I('post.'));
            $fileInfo = $goods->upload();                                // 文件上传处理
            if ($fileInfo){
                $big_logo   = './Public/Uploads/' . I('post.goods_big_logo');   // 获取旧原图
                $small_logo = './Public/Uploads/' . I('post.goods_small_logo'); // 获取旧缩略图
                file_exists($big_logo) && unlink($big_logo);             // 删除旧原图
                file_exists($small_logo) && unlink($small_logo);         // 删除旧缩略图
                $_POST['goods_big_logo'] = $fileInfo['src'];             // 新原图
                $_POST['goods_small_logo'] = $fileInfo['thumb'];         // 新小图
            }
            $data = $goods->create();                                    // 获取数据
            if (!$data) {
                $this->error($goods->getError());
            }
            $res = $goods->save();                                       // 存储数据
            if ($res) {
                $this->success('编辑成功！', U('index'), 2);
                die;
            }else {
                $this->error('编辑失败！');
                die;
            }
        }
        $this->gid   = I('get.gid', 0, 'intval');                        // 接收商品id并赋值输出
        $this->info  = $goods->find( $this->gid );                       // 获取当前ID数据并赋值输出
        $this->display();                                                // 输出模板
    }

}